Apache Ant একটি জনপ্রিয় বিল্ড টুল যা সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়াকে স্বয়ংক্রিয় করতে ব্যবহৃত হয়। এর মধ্যে কিছু শক্তিশালী Macros এবং Script Tasks রয়েছে যা আপনাকে একাধিক টাস্ক বা কার্যাবলী পুনরায় ব্যবহারযোগ্য করতে এবং স্ক্রিপ্টিং ভাষায় লজিক লিখতে সাহায্য করে।
এটি বিশেষভাবে কার্যকরী যখন আপনি বারবার একই ধরনের কাজ করতে চান বা ডাইনামিক স্ক্রিপ্টিংয়ের মাধ্যমে বিল্ড প্রক্রিয়াকে কাস্টমাইজ করতে চান।
এই নিবন্ধে আমরা Macros এবং Script Task সম্পর্কিত বিষয় নিয়ে আলোচনা করবো।
Macro টাস্কটি আপনাকে একাধিক টাস্ক বা কাজ একত্রিত করে একটি নতুন কাস্টম টাস্ক তৈরি করতে সাহায্য করে। এটি পুনরায় ব্যবহারযোগ্য ব্লক তৈরি করতে ব্যবহৃত হয় যা একাধিক টাস্কে একই কার্যাবলী পুনরাবৃত্তি করার প্রয়োজন পড়ে।
<macrodef name="greet">
<attribute name="name"/>
<sequential>
<echo message="Hello, ${name}! Welcome to Apache Ant."/>
</sequential>
</macrodef>
<target name="greeting">
<greet name="John"/>
<greet name="Alice"/>
</target>
এখানে, greet
একটি কাস্টম মেক্রো যা name
অ্যাট্রিবিউট নেয় এবং একটি প্রিন্ট স্টেটমেন্ট তৈরি করে। greeting
টার্গেটে greet
মেক্রো দুটি নাম দিয়ে কল করা হয়েছে।
macrodef
: এটি একটি কাস্টম টাস্ক তৈরি করতে ব্যবহৃত হয় যা একাধিক টাস্ক বা কার্যাবলী সমন্বিত করে।attribute
: এটি মেক্রোর জন্য প্যারামিটার সংজ্ঞায়িত করে।sequential
: এটি একাধিক টাস্ক বা কার্যাবলী একসাথে এক্সিকিউট করার জন্য ব্যবহৃত হয়।মেক্রোর মধ্যে parameters ব্যবহার করতে attribute
এবং element
ব্যবহার করা যেতে পারে। আপনি attribute
দিয়ে কাস্টম প্যারামিটার পাস করতে পারেন, আর element
দিয়ে ফাইল বা অন্যান্য রিসোর্স পাস করতে পারেন।
<macrodef name="compileJava">
<attribute name="srcdir"/>
<attribute name="destdir"/>
<sequential>
<javac srcdir="${srcdir}" destdir="${destdir}"/>
</sequential>
</macrodef>
<target name="compile">
<compileJava srcdir="src" destdir="build/classes"/>
</target>
এটি compileJava
নামে একটি কাস্টম মেক্রো তৈরি করেছে যা srcdir
এবং destdir
অ্যাট্রিবিউট গ্রহণ করে, এবং javac
টাস্কটি এক্সিকিউট করে।
script
টাস্কটি আপনাকে আপনার বিল্ড স্ক্রিপ্টে scripting language ব্যবহার করতে সক্ষম করে। আপনি এখানে JavaScript, Groovy, JRuby, বা অন্য কোনো স্ক্রিপ্টিং ভাষা ব্যবহার করতে পারেন। এটি সেই ক্ষেত্রে ব্যবহৃত হয় যখন আপনাকে ডাইনামিক বা কাস্টম লজিক লিখতে হয়।
<target name="script-example">
<script language="javascript">
<![CDATA[
var message = "Hello from JavaScript in Ant!";
project.log(message, Project.MSG_INFO);
]]>
</script>
</target>
এটি JavaScript ব্যবহার করে একটি বার্তা কনসোলে প্রিন্ট করবে। project.log()
মেথডটি Ant Project থেকে লগ মেসেজ প্রিন্ট করে।
language
: যে স্ক্রিপ্টিং ভাষা ব্যবহার করা হবে (যেমন: javascript
, groovy
, ruby
)।CDATA
: স্ক্রিপ্টের মধ্যে বিশেষ চরিত্রগুলি সঠিকভাবে ব্যাখ্যা করতে CDATA
ট্যাগ ব্যবহার করা হয়।Groovy হল একটি জনপ্রিয় স্ক্রিপ্টিং ভাষা যা Java-এর সাথে সম্পূর্ণভাবে ইন্টিগ্রেটেড। Ant স্ক্রিপ্টে Groovy ব্যবহার করা খুবই সুবিধাজনক। এটি আপনাকে জটিল লজিক দ্রুত লিখতে সহায়তা করে।
<target name="groovy-script-example">
<script language="groovy">
<![CDATA[
def message = "Hello from Groovy!"
println message
]]>
</script>
</target>
এটি Groovy স্ক্রিপ্ট ব্যবহার করে একটি বার্তা কনসোলে প্রিন্ট করবে।
language="groovy"
: এটি Groovy ভাষায় স্ক্রিপ্ট এক্সিকিউট করবে।println
: Groovy ভাষায় কনসোলে আউটপুট প্রিন্ট করতে ব্যবহৃত হয়।JRuby হল Ruby ভাষার একটি ইমপ্লিমেন্টেশন যা Java Virtual Machine (JVM) এ রান করে। Ant-এ JRuby ব্যবহার করা আপনাকে Ruby স্ক্রিপ্টিং ভাষার শক্তি নিয়ে কাজ করতে সাহায্য করে।
<target name="ruby-script-example">
<script language="ruby">
<![CDATA[
message = "Hello from JRuby!"
puts message
]]>
</script>
</target>
এটি JRuby স্ক্রিপ্ট ব্যবহার করে "Hello from JRuby!" বার্তা কনসোলে প্রিন্ট করবে।
আপনি script
টাস্ক ব্যবহার করে বাইরের স্ক্রিপ্ট ফাইল (যেমন .groovy
, .js
, .rb
)ও এক্সিকিউট করতে পারেন।
<target name="external-script">
<script language="javascript">
<file file="scripts/myScript.js"/>
</script>
</target>
এটি scripts/myScript.js
ফাইলটি এক্সিকিউট করবে।
file
: এটি বাইরের স্ক্রিপ্ট ফাইলের পাথ।Apache Ant Macros এবং Script Task আপনাকে build automation-এ শক্তিশালী কাস্টমাইজেশন করতে সহায়তা করে। Macros আপনাকে একাধিক টাস্ক একত্রিত করে পুনরাবৃত্তি করা কার্যাবলী কাস্টম টাস্ক হিসেবে তৈরি করতে সাহায্য করে, আর Script Task আপনাকে স্ক্রিপ্টিং ভাষা ব্যবহার করে ডাইনামিক লজিক লিখতে সহায়তা করে। Groovy, JavaScript, JRuby, এবং অন্যান্য স্ক্রিপ্টিং ভাষা ব্যবহার করে আপনি বিল্ড প্রক্রিয়া আরও নমনীয় এবং শক্তিশালী করতে পারেন।
Apache Ant-এ <macrodef>
টাস্কটি একটি খুব শক্তিশালী টুল যা আপনাকে পুনঃব্যবহারযোগ্য টাস্ক ম্যাক্রো তৈরি করতে সাহায্য করে। এটি আপনাকে একাধিক টাস্কের সেট বা ব্লক তৈরি করার সুযোগ দেয়, যা পরবর্তীতে Ant বিল্ড স্ক্রিপ্টে বিভিন্ন জায়গায় পুনরায় ব্যবহার করা যায়।
Macrodef টাস্ক ব্যবহার করে আপনি একাধিক টাস্ককে একটি কাস্টম টাস্কের মতো গ্রুপ করতে পারেন এবং তারপর সেই টাস্কটি পুনরায় অন্য টার্গেট বা টাস্কে ব্যবহার করতে পারেন। এটি বিশেষভাবে উপকারী যখন একাধিক টার্গেট বা স্ক্রিপ্টে একই ধরনের কার্যক্রম বা টাস্ক চালাতে হয়।
<macrodef name="macro_name">
<attribute name="param1" />
<attribute name="param2" />
<sequential>
<!-- Define tasks that make up the macro -->
</sequential>
</macrodef>
এটি একটি সহজ উদাহরণ যেখানে একটি macrodef টাস্ক ব্যবহার করে পুনঃব্যবহারযোগ্য একটি টাস্ক তৈরি করা হয়েছে যা কনসোলে বার্তা প্রিন্ট করবে।
build.xml
)<project name="MacrodefExample" default="useMacro" basedir=".">
<!-- Defining a macro -->
<macrodef name="printMessage">
<attribute name="message" />
<sequential>
<echo message="${message}" />
</sequential>
</macrodef>
<target name="useMacro">
<!-- Using the macro -->
<printMessage message="Hello from the macro!" />
<printMessage message="This is reusable!" />
</target>
</project>
এখানে:
<macrodef name="printMessage">
: একটি ম্যাক্রো তৈরি করা হয়েছে যার নাম printMessage
।<attribute name="message" />
: একটি ইনপুট প্যারামিটার message
তৈরি করা হয়েছে, যা ম্যাক্রো ব্যবহার করার সময় পাস করা হবে।<sequential>
: ম্যাক্রোর কার্যক্রম। এখানে কেবল <echo>
টাস্ক ব্যবহার করা হচ্ছে, যা message প্যারামিটারটি কনসোলে প্রিন্ট করবে।<printMessage message="..."/>
: এই টাস্কের মাধ্যমে ম্যাক্রোটি দুইবার ব্যবহার করা হচ্ছে, এবং প্রত্যেকবার একটি নতুন বার্তা প্রিন্ট করা হবে।Hello from the macro!
This is reusable!
এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি macrodef টাস্কের মধ্যে একাধিক টাস্ক রয়েছে, এবং এটি পুনঃব্যবহার করা হচ্ছে।
<project name="ComplexMacroExample" default="useMacro" basedir=".">
<!-- Defining a complex macro -->
<macrodef name="copyAndPrint">
<attribute name="src" />
<attribute name="dest" />
<sequential>
<copy file="${src}" tofile="${dest}" />
<echo message="File copied from ${src} to ${dest}" />
</sequential>
</macrodef>
<target name="useMacro">
<!-- Using the macro with different parameters -->
<copyAndPrint src="source.txt" dest="destination.txt" />
<copyAndPrint src="config.xml" dest="config_backup.xml" />
</target>
</project>
এখানে:
<macrodef name="copyAndPrint">
: একটি copyAndPrint
ম্যাক্রো তৈরি করা হয়েছে যা দুটি টাস্ককে একত্রে কার্যকর করে:<copy>
: একটি ফাইল কপি করার টাস্ক।<echo>
: কপি করার পর কনসোলে বার্তা প্রিন্ট করার টাস্ক।<copyAndPrint src="source.txt" dest="destination.txt" />
: এই ম্যাক্রোটি ব্যবহার করে দুটি আলাদা ফাইল কপি করা হচ্ছে এবং কনসোলে বার্তা প্রিন্ট করা হচ্ছে।File copied from source.txt to destination.txt
File copied from config.xml to config_backup.xml
আপনি <macrodef>
টাস্কের মধ্যে default মান ব্যবহার করতে পারেন, যা কোনো প্যারামিটার পাস না করলে স্বয়ংক্রিয়ভাবে ব্যবহার হবে।
<project name="MacrodefWithDefaultExample" default="useMacro" basedir=".">
<!-- Defining a macro with default values -->
<macrodef name="printGreeting">
<attribute name="name" default="Guest" />
<sequential>
<echo message="Hello, ${name}!" />
</sequential>
</macrodef>
<target name="useMacro">
<!-- Using the macro without passing the 'name' parameter -->
<printGreeting />
<!-- Using the macro with a custom 'name' -->
<printGreeting name="John" />
</target>
</project>
এখানে:
default="Guest"
: যদি name
প্যারামিটারটি পাস না করা হয়, তাহলে Guest
হবে ডিফল্ট মান।<printGreeting />
টাস্কে name
প্যারামিটার পাস না করলে ডিফল্ট Guest
মান ব্যবহার হবে।<printGreeting name="John" />
টাস্কে name
প্যারামিটার পাস করা হয়েছে, তাই সেখানে John
ব্যবহার হবে।Hello, Guest!
Hello, John!
Macrodef টাস্কের মধ্যে আপনি একাধিক ম্যাক্রোও ব্যবহার করতে পারেন, যাতে একটি ম্যাক্রো অন্য একটি ম্যাক্রোকে কল করতে পারে।
<project name="NestedMacroExample" default="useMacro" basedir=".">
<!-- Defining the first macro -->
<macrodef name="printHeader">
<attribute name="title" />
<sequential>
<echo message="===== ${title} =====" />
</sequential>
</macrodef>
<!-- Defining the second macro that calls the first -->
<macrodef name="printContent">
<attribute name="content" />
<sequential>
<printHeader title="Content Start" />
<echo message="${content}" />
<printHeader title="Content End" />
</sequential>
</macrodef>
<target name="useMacro">
<!-- Using the nested macro -->
<printContent content="This is the body of the content." />
</target>
</project>
এখানে:
<printHeader>
ম্যাক্রোটি একটি হেডার বার্তা প্রিন্ট করবে।<printContent>
ম্যাক্রোটি <printHeader>
ম্যাক্রোকে কল করে কনটেন্ট শুরু এবং শেষের হেডার প্রিন্ট করবে, এবং তার মধ্যে কনটেন্ট প্রিন্ট করবে।===== Content Start =====
This is the body of the content.
===== Content End =====
Macrodef Task হল Ant-এ একটি শক্তিশালী টুল যা আপনাকে reusable tasks তৈরি করতে সাহায্য করে। আপনি Ant স্ক্রিপ্টে বিভিন্ন টাস্ক বা কার্যক্রম একত্রিত করে একটি ম্যাক্রো তৈরি করতে পারেন এবং তারপর এটি একাধিক জায়গায় ব্যবহার করতে পারেন। এর মাধ্যমে আপনি বিল্ড প্রক্রিয়া আরও সংগঠিত এবং কার্যকরী করতে পারেন। Macrodef টাস্কের সাহায্যে:
এটি Ant স্ক্রিপ্টে পুনঃব্যবহারযোগ্য কার্যক্রম তৈরি করার একটি চমৎকার উপায়।
Apache Ant একটি শক্তিশালী বিল্ড টুল যা Java ভিত্তিক প্রকল্পগুলির বিল্ড প্রক্রিয়া অটোমেট করতে ব্যবহৃত হয়। <script>
টাস্কটি অ্যাপাচি অ্যান্টে ব্যবহৃত হয় external scripts (যেমন JavaScript, Groovy, বা অন্যান্য স্ক্রিপ্ট) রান করার জন্য। এটি আপনাকে আপনার বিল্ড স্ক্রিপ্টে এক্সটার্নাল স্ক্রিপ্টগুলি ইন্টিগ্রেট করতে এবং সেগুলি অটোমেটিক্যালি রান করতে সক্ষম করে।
এই টাস্কটি ব্যবহার করে আপনি JavaScript বা Groovy স্ক্রিপ্ট চালাতে পারেন, যা সাধারণত কমপ্লেক্স লজিক বা অতিরিক্ত কার্যকলাপ সম্পাদন করার জন্য দরকার হয়, যা শুধু Ant's built-in tasks দিয়ে সম্ভব নয়।
<script>
Task: Overview<script>
টাস্ক আপনাকে আপনার বিল্ড স্ক্রিপ্টে এক্সটার্নাল স্ক্রিপ্ট, যেমন JavaScript বা Groovy রান করতে দেয়। আপনি এই টাস্কটি ব্যবহার করে কিছু অতিরিক্ত ফিচার যেমন ডেটা প্রসেসিং, ফাইল ম্যানিপুলেশন, বা যেকোনো কাস্টম লজিক প্রয়োগ করতে পারেন।
<script>
টাস্কে আপনি স্ক্রিপ্ট ভাষা (যেমন JavaScript, Groovy, Python ইত্যাদি) এবং স্ক্রিপ্টের সোর্স নির্ধারণ করতে পারেন। এছাড়া, স্ক্রিপ্টটি চলানোর জন্য classpath এবং dependencies যুক্ত করারও সুযোগ রয়েছে।
<script language="language_name" src="script_file">
<!-- Or directly write the script -->
<script language="language_name">
// Script content goes here
</script>
</script>
language
: স্ক্রিপ্টের ভাষা (যেমন JavaScript, Groovy ইত্যাদি)।src
: স্ক্রিপ্ট ফাইলের পাথ।src
এর পরিবর্তে স্ক্রিপ্ট কোড সরাসরি <script>
ট্যাগের মধ্যে লিখতে পারেন।ধরা যাক, আপনি একটি JavaScript স্ক্রিপ্ট চালাতে চান, যা কিছু গণনা বা ডেটা প্রসেস করবে।
build.xml:
<project name="ScriptExample" default="run-js-script">
<target name="run-js-script">
<!-- Running a JavaScript Script -->
<script language="javascript">
<![CDATA[
var number1 = 10;
var number2 = 20;
var sum = number1 + number2;
print("The sum of " + number1 + " and " + number2 + " is: " + sum);
]]>
</script>
</target>
</project>
এখানে:
<script language="javascript">
ট্যাগের মধ্যে JavaScript কোড লিখে, আমরা দুটি সংখ্যা যোগফল বের করছি এবং print()
ফাংশন ব্যবহার করে আউটপুট দেখাচ্ছি।<![CDATA[]]>
ট্যাগের মধ্যে স্ক্রিপ্ট কোড লেখার মাধ্যমে অ্যান্টে বিশেষ চরিত্রগুলি এस्कেপ করা থেকে রক্ষা পাওয়া যায়।আউটপুট হবে:
The sum of 10 and 20 is: 30
Groovy একটি ডাইনামিক ভাষা যা Java প্ল্যাটফর্মে রান করে এবং Java কোডের সাথে মিশে কাজ করতে পারে। Groovy অ্যান্ট স্ক্রিপ্টে ব্যবহৃত হলে এটি বেশ কার্যকরী হতে পারে, বিশেষত যখন আপনি একাধিক লাইব্রেরি ব্যবহার করতে চান এবং জটিল লজিক প্রয়োগ করতে চান।
build.xml:
<project name="GroovyScriptExample" default="run-groovy-script">
<target name="run-groovy-script">
<!-- Running a Groovy Script -->
<script language="groovy">
<![CDATA[
def greeting = "Hello, Apache Ant!"
println(greeting)
]]>
</script>
</target>
</project>
এখানে:
<script language="groovy">
ট্যাগ ব্যবহার করে আমরা Groovy কোড লিখছি যা একটি গ্রীটিং মেসেজ প্রিন্ট করবে।println()
Groovy এর একটি ফাংশন যা আউটপুট কনসোলে প্রিন্ট করে।আউটপুট হবে:
Hello, Apache Ant!
আপনি যদি স্ক্রিপ্ট কোডটি বিল্ড ফাইলের মধ্যে না লিখে একটি পৃথক ফাইলে রাখতে চান, তাহলে src
অ্যাট্রিবিউট ব্যবহার করতে পারেন।
build.xml:
<project name="ExternalScriptExample" default="run-external-js">
<target name="run-external-js">
<!-- Run an external JavaScript file -->
<script language="javascript" src="scripts/example.js"/>
</target>
</project>
এখানে:
<script language="javascript" src="scripts/example.js"/>
এই টাস্কটি scripts/example.js
ফাইলটি চালাবে।example.js:
var number1 = 30;
var number2 = 40;
var sum = number1 + number2;
print("The sum of " + number1 + " and " + number2 + " is: " + sum);
আউটপুট হবে:
The sum of 30 and 40 is: 70
একইভাবে, আপনি Groovy স্ক্রিপ্ট ফাইলও চালাতে পারেন।
build.xml:
<project name="ExternalGroovyExample" default="run-external-groovy">
<target name="run-external-groovy">
<!-- Run an external Groovy file -->
<script language="groovy" src="scripts/groovy-script.groovy"/>
</target>
</project>
groovy-script.groovy:
def greeting = "Hello from external Groovy script!"
println(greeting)
আউটপুট হবে:
Hello from external Groovy script!
<script>
Task<![CDATA[]]>
ট্যাগ ব্যবহার করুন।try-catch
ব্লক ব্যবহার করে ত্রুটি পরিচালনা করুন এবং সঠিক ত্রুটি বার্তা প্রিন্ট করুন।<script>
টাস্ক অ্যাপাচি অ্যান্টে এক্সটার্নাল স্ক্রিপ্ট চালানোর জন্য ব্যবহৃত হয়। আপনি JavaScript বা Groovy স্ক্রিপ্ট রান করতে এই টাস্কটি ব্যবহার করতে পারেন, যা আপনার বিল্ড প্রক্রিয়ায় অতিরিক্ত লজিক বা কার্যকলাপ যোগ করতে সহায়তা করে। Best practices অনুসরণ করে, আপনি কাস্টম স্ক্রিপ্টগুলিকে আরও কার্যকরী, ডাইনামিক এবং পুনঃব্যবহারযোগ্য করতে পারবেন।
Apache Ant একটি ওপেন সোর্স বিল্ড টুল যা Java প্রজেক্টের বিল্ড, টেস্টিং এবং ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়। এর মধ্যে একটি শক্তিশালী টাস্ক হল <scriptdef>
টাস্ক, যা আপনাকে কাস্টম স্ক্রিপ্ট টাস্ক ডিফাইন করার সুযোগ দেয়। এর মাধ্যমে আপনি JavaScript, Groovy, Python বা BeanShell স্ক্রিপ্টে নিজের কাস্টম টাস্ক তৈরি করতে পারেন এবং এটি আপনার বিল্ড স্ক্রিপ্টে ব্যবহার করতে পারেন।
<scriptdef>
টাস্কের সাহায্যে আপনি বিল্ড প্রক্রিয়ার মধ্যে নিজস্ব কাস্টম স্ক্রিপ্ট ফাংশনালিটি অন্তর্ভুক্ত করতে পারেন, যা বিশেষ করে যখন কোনো নির্দিষ্ট কার্যকলাপ (যেমন ফাইল ম্যানিপুলেশন, গণনা, বা পরিবেশগত চেক) করতে হয় এবং তা সরাসরি Java দিয়ে করতে চান না।
<scriptdef>
Task: Overview<scriptdef>
টাস্কটি একটি কাস্টম স্ক্রিপ্ট টাস্ক তৈরি করে যা বিল্ড প্রক্রিয়ায় পুনরায় ব্যবহার করা যায়। এই টাস্কটি স্ক্রিপ্টিং ভাষায় কোড লিখতে এবং তা টাস্ক হিসেবে রান করানোর সুযোগ দেয়। এটি একটি Custom Task তৈরি করতে ব্যবহৃত হয়, যা স্ক্রিপ্টের ভিতরে প্রয়োজনীয় কার্যকলাপ সংজ্ঞায়িত করে এবং পরে তা বিল্ড স্ক্রিপ্টে ব্যবহার করা হয়।
javascript
, groovy
, python
, বা beanshell
।<parameter>
: কাস্টম টাস্কের জন্য প্যারামিটার যোগ করতে ব্যবহৃত হয়।<scriptdef>
Task উদাহরণ<project name="ScriptdefExample" default="run-custom-task">
<target name="run-custom-task">
<!-- Define a custom task using JavaScript -->
<scriptdef name="greet" language="javascript">
<parameter name="name"/>
<![CDATA[
// JavaScript code
console.log('Hello, ' + name + '!');
]]>
</scriptdef>
<!-- Execute the custom task -->
<greet name="John"/>
</target>
</project>
<scriptdef>
টাস্কের মধ্যে language="javascript"
ব্যবহৃত হয়েছে, যার মাধ্যমে JavaScript কোড লেখা হচ্ছে।<parameter name="name"/>
এর মাধ্যমে name
প্যারামিটারটি কাস্টম স্ক্রিপ্টে পাস করা হচ্ছে।<greet name="John"/>
এই টাস্কটি greet
কাস্টম স্ক্রিপ্টটিকে name="John"
প্যারামিটার দিয়ে এক্সিকিউট করবে এবং আউটপুট হিসেবে "Hello, John!" কনসোলে প্রদর্শিত হবে।<project name="GroovyScriptdefExample" default="run-groovy-task">
<target name="run-groovy-task">
<!-- Define a custom task using Groovy -->
<scriptdef name="calculate-sum" language="groovy">
<parameter name="a"/>
<parameter name="b"/>
<![CDATA[
// Groovy code
def sum = a + b
println "The sum of $a and $b is $sum"
]]>
</scriptdef>
<!-- Execute the custom Groovy task -->
<calculate-sum a="5" b="10"/>
</target>
</project>
language="groovy"
ব্যবহার করে Groovy স্ক্রিপ্ট ডিফাইন করা হয়েছে।<parameter name="a"/>
এবং <parameter name="b"/>
এর মাধ্যমে স্ক্রিপ্টে প্যারামিটার পাস করা হচ্ছে।<calculate-sum a="5" b="10"/>
টাস্কটি স্ক্রিপ্টটি চালাবে এবং আউটপুট হবে: "The sum of 5 and 10 is 15"
।<project name="PythonScriptdefExample" default="run-python-task">
<target name="run-python-task">
<!-- Define a custom task using Python -->
<scriptdef name="say-goodbye" language="python">
<parameter name="name"/>
<![CDATA[
# Python code
print(f"Goodbye, {name}!")
]]>
</scriptdef>
<!-- Execute the custom Python task -->
<say-goodbye name="Alice"/>
</target>
</project>
language="python"
ব্যবহার করে Python স্ক্রিপ্টটি ডিফাইন করা হয়েছে।<parameter name="name"/>
প্যারামিটার ব্যবহার করে নাম পাস করা হচ্ছে।<say-goodbye name="Alice"/>
টাস্কটি চলবে এবং আউটপুট হিসেবে "Goodbye, Alice!" কনসোলে প্রদর্শিত হবে।একাধিক প্যারামিটার সহ কাস্টম স্ক্রিপ্ট তৈরি করা যায়, যা আরো জটিল কার্যকলাপ সম্পাদন করতে সাহায্য করে।
<project name="AdvancedScriptdef" default="run-complex-task">
<target name="run-complex-task">
<!-- Define a custom task using Groovy with multiple parameters -->
<scriptdef name="greet-user" language="groovy">
<parameter name="greeting"/>
<parameter name="name"/>
<![CDATA[
// Groovy code
println "$greeting, $name!"
]]>
</scriptdef>
<!-- Execute the custom task with multiple parameters -->
<greet-user greeting="Good Morning" name="David"/>
</target>
</project>
<parameter>
টাস্কের মাধ্যমে দুইটি প্যারামিটার, greeting
এবং name
পাস করা হয়েছে।<greet-user greeting="Good Morning" name="David"/>
টাস্কটি Groovy স্ক্রিপ্ট চালাবে এবং আউটপুট হিসেবে "Good Morning, David!" কনসোলে প্রদর্শিত হবে।<scriptdef>
Task<scriptdef>
টাস্কটি অ্যাপাচি অ্যান্টে কাস্টম স্ক্রিপ্ট টাস্ক তৈরি করার জন্য ব্যবহৃত হয়, যা JavaScript, Groovy, Python বা Beanshell ভাষায় লেখা যেতে পারে। এই টাস্কটি আপনাকে আপনার বিল্ড স্ক্রিপ্টে বিশেষ কার্যকলাপ যোগ করার সুযোগ দেয় এবং আপনি যে ভাষায় দক্ষ, সেই ভাষায় কাস্টম টাস্ক তৈরি করতে পারেন। এটি আপনার বিল্ড প্রক্রিয়াকে আরো নমনীয় এবং কাস্টমাইজেবল করে তোলে।
common.read_more